package edu.fasta.sisinfo2.juegos;


/**
 * @author Quique
 *
 */
public interface Juego {

	/**
	 * Compara un {@link Juego} con una {@link EscaleraReal} y devuelve el ganador.
	 * @param unaEscaleraReal
	 * @return mejor {@link Juego}
	 */
	public Juego compararJuego(EscaleraReal unaEscaleraReal);
	
	/**
	 * Compara un {@link Juego} con una {@link EscaleraColor} y devuelve el ganador.
	 * @param unaEscaleraColor
	 * @return mejor {@link Juego}
	 */
	public Juego compararJuego(EscaleraColor unaEscaleraColor);
	
	/**
	 * Compara un {@link Juego} con un {@link Poker} y devuelve el ganador.
	 * @param unPoker
	 * @return mejor {@link Juego}
	 */
	public Juego compararJuego(Poker unPoker);
	
	/**
	 * Compara un {@link Juego} con un {@link Full} y devuelve el ganador.
	 * @param unFull
	 * @return mejor {@link Juego}
	 */
	public Juego compararJuego(Full unFull);
	
	/**
	 * Compara un {@link Juego} con un {@link Color} y devuelve el ganador.
	 * @param unColor
	 * @return mejor {@link Juego}
	 */
	public Juego compararJuego(Color unColor);
	
	/**
	 * Compara un {@link Juego} con una {@link Escalera} y devuelve el ganador.
	 * @param unaEscalera
	 * @return mejor {@link Juego}
	 */
	public Juego compararJuego(Escalera unaEscalera);
	
	/**
	 * Compara un {@link Juego} con un {@link Trio} y devuelve el ganador.
	 * @param unTrio
	 * @return mejor {@link Juego}
	 */
	public Juego compararJuego(Trio unTrio);
	
	/**
	 * Compara un {@link Juego} con un {@link DoblePar} y devuelve el ganador.
	 * @param unDoblePar
	 * @return mejor {@link Juego}
	 */
	public Juego compararJuego(DoblePar unDoblePar);
	
	/**
	 * Compara un {@link Juego} con un {@link Par} y devuelve el ganador.
	 * @param unPar
	 * @return mejor {@link Juego}
	 */
	public Juego compararJuego(Par unPar);
	
	/**
	 * Compara un {@link Juego} con una {@link CartaAlta} y devuelve el ganador.
	 * @param unaCartaAlta
	 * @return mejor {@link Juego}
	 */
	public Juego compararJuego(CartaAlta unaCartaAlta);

	/**
	 * Compara un {@link Juego} con otro {@link Juego} y bindea al metodo correspondiente para compararlos.
	 * @param unJuego
	 * @return mejor {@link Juego}
	 */
	public Juego compararJuego(Juego unJuego);
		
	/**
	 * Devuelve un String con el nombre del juego
	 * @return String
	 */
	public String queSos();
	

}


